//编写函数reverse(s), 将字符串s中的字符顺序颠倒过来.
//使用该函数编写一个程序,每次颠倒一个输入行中的字符顺序
#include <stdio.h>
#define MAXSIZE 1000

void reverse(char s[]);

int main()
{
    char line[MAXSIZE];

    while(getline(line, MAXSIZE) > 0) 
    {
        reverse(line);
        printf("%s", line);
    }
    return 0;
}

//reverse函数,翻转字符串
//先找到'\0',如果'\0'前一位为'\n',再往前一位,头尾指针不断靠近,交换对应位置上的值
void reverse(char s[])
{
    int first, end;
    int temp;                       //temp 是中间变量

    first = end = 0;                //指向头的first和指向尾的end
    while (s[end] != '\0')          //先找到'\0'
        ++end;
    --end;                          //索引指到'\0'前一个
    if (s[end] == '\n')             //如果是'\n',索引再往前移动一位
        --end;
    while (first < end)             //进行首尾交换
    {
        temp = s[first];
        s[first] = s[end];
        s[end] = temp;
        ++first;
        --end;
    }
}

//getline函数:将输入的一行读取并返回其长度,只能读取前1000个字符,超出不读取但计算长度
int getline(char s[], int lim)
{
    int i, c, j;

    j = 0;
    for(i = 0; (c = getchar()) != EOF && c != '\n'; ++i)
    {
        if(i < lim - 2)
            s[j++] = c;
    }
    if (c == '\n')
    {
        s[j] = '\n';
        ++j;
        ++i;
    }
    s[j] = '\0';
    return i;
}